package com.itheima.fanxing;

import com.itheima.domain.Student;

import java.util.ArrayList;
import java.util.List;

/**
 * - 类型通配符: <?>
 * - ArrayList<?>: 表示元素类型未知的ArrayList,它的元素可以匹配任何的类型
 * - 但是并不能把元素添加到ArrayList中了,获取出来的也是父类类型
 * - 类型通配符上限: <? extends 类型>
 * *   - ArrayListList <? extends Number>: 它表示的类型是Number或者其子类型
 * - 类型通配符下限: <? super 类型>
 * - ArrayListList <? super Number>: 它表示的类型是Number或者其父类型
 */
public class Test07 {

    public static void main(String[] args) {
        //向通配符中添加元素
       /* ArrayList<?> list3= new ArrayList<>();
       // list3.add("1243");
        Object o = list3.get(3);
        System.out.println(o);
        System.out.println(list3);*/
     /*   ArrayList<String> list= new ArrayList<>();
        list.add("鹿晗");
        list.add("蔡徐坤");
        list.add("吴亦凡");
        list.add("黄子韬");
        show(list);*/
   /*     ArrayList<Student> list2= new ArrayList<>();
        list2.add(new Student("鹿晗",30));
        list2.add(new Student("吴亦凡",30));
        list2.add(new Student("黄子韬",27));
        list2.add(new Student("蔡徐坤",22));*/

        //调用 通配符


        //调用向上匹配


        //调用向下匹配
     ArrayList<Integer> list2 = new ArrayList<>();
//        list.add(1);
//        list.add(2);
//        list.add(3);
//        show1(list);
        //show(list);

        ArrayList<Object> list= new ArrayList<>();
        list.add("1243");
        list.add(123);
        list.add(true);
        show2(list);
        //show1(list);
        //show2(list2);
    }

    //<?>
    public static void show(ArrayList<?> list) {
        for (Object o : list) {
            System.out.println(o);
        }
    }

    //向下匹配
    public static void show1(ArrayList<? extends Number> list) {
        for (Number number : list) {
            System.out.println(number);
        }
    }

    //向上匹配
    public static void show2(ArrayList<? super Number> list) {
        for (Object o : list) {
            System.out.println(o);
        }
    }
}
